#ifndef ELLIPSE_H
#define ELLIPSE_H

#include <object.h>
#include <surface.h>

typedef struct ellipse
{
  object_t obj;
  coord_t center;
  uint16_t radiusx;
  uint16_t radiusy;
} ellipse_t;


ellipse_t *
ellipse_new( void );

void
ellipse_free( ellipse_t *ellipse );

char *
ellipse_str( ellipse_t *ellipse );

void
__ellipse_draw( ellipse_t *ellipse, surface_t *surface );

void
ellipse_draw( ellipse_t *ellipse, surface_t *surface );


/*
 * You may want to experiment with ellipse drawing algorithms changing this
 * function pointers.
 */
extern void (*ellipse_draw_aliased)( uint16_t, uint16_t, uint16_t, uint16_t,
				    surface_t *, color_t, float, int );

extern void (*ellipse_draw_antialiased)( uint16_t, uint16_t, uint16_t,
					 uint16_t, surface_t *, color_t,
					 float, int );

void
ellipse_draw_trivial( uint16_t x, uint16_t y,
		      uint16_t radiusx, uint16_t radiusy,
		      surface_t *surface, color_t color,
		      float transp, int fill );

void
ellipse_draw_trivial_antialias( uint16_t x, uint16_t y,
				uint16_t radiusx, uint16_t radiusy,
				surface_t *surface, color_t color,
				float transp, int fill );

void
ellipse_draw_bresenham( uint16_t x, uint16_t y,
			uint16_t radiusx, uint16_t radiusy,
			surface_t *surface, color_t color,
			float transp, int fill );


#endif /* ELLIPSE_H */
